import cv2
import numpy as np
import matplotlib.pyplot as plt
from math import sqrt
from xml.dom.minidom import parse
import pytesseract
import os


def biaozhun_cells(All_cell_low, record_biaozhun, Rows):
    """
    该函数的作用：找出“标准”对应的所有的标准值
    :param Rows: 表格的行信息
    :param All_cell_low: 根据底线排序之后的所有单元格的位置等信息
    :param record_biaozhun: 找出的“标准”
    :return:
    """
    # 根据“标准”单元格作为起始点，进一步计算出需要标准的列数
    # 具体，首先将与“标准”单元格底线值相同的所有单元格取出来，之后再根据单元格之间的连续性判断是否为标准
    # record_biaozhun 存放有[[[左上角点x, y]， [右下角点x, y]， 单元格图象索引]， [行， 列]， 单元格图象索引]

    # 存放与“标准”相同单元格底线的在All_cell_low中的索引
    index_low = []

    for record in record_biaozhun:

        low_biaozhun = record[0][1][0]

        for index, low_points in enumerate(All_cell_low):

            if low_biaozhun == low_points[0][0][1][0]:
                index_low.append(index)
                break

    # 对所有与“标准”单元格底线相同的待选单元格进行判断
    # '标准值' 判断标准：连续性：待检测单元格的左下角点与前一个单元格的右下角点相同  包含：待检单元格高度小于“标准”单元格的高度
    # 单元格内容：数字、大于、小于号 -

    # 存放前一个单元格的右下角点以及“标准”单元格的高度
    point_height = [[], 0]
    # 存放 “标准值”的单元格索引
    biaozhun_index = []
    for index, record in enumerate(record_biaozhun):

        point_height[0] = record[0][1]
        point_height[1] = record[0][1][0] - record[0][0][0]

        # 与’标准‘底线相同的所有的单元格
        cells = All_cell_low[index_low[index]]

        index_list = []
        for cell in cells:
            # print(cell)
            # 计算待测单元格的左下角点坐标以及其单元格高度
            point_LeftLow = [cell[0][1][0], cell[0][0][1]]
            cell_height = cell[0][1][0] - cell[0][0][0]

            cell_jiance = Rows[cell[1][0]].getElementsByTagName('Cell')[cell[1][1]]
            data = cell_jiance.getElementsByTagName('Data')
            value = data[0].childNodes[0].data

            # 标准值指示
            flag = 0
            # 判断是否连续、是否包含
            if point_LeftLow == point_height[0] and cell_height <= point_height[1]:
                # 在连续和包含的基础上判断单元格中的内容
                value = list(value)

                if "≤" in value or "≥" in value:
                    flag = 1
                if "-" in value:
                    if ('0' in value or '1' in value or '2' in value or '3' in value
                            or '4' in value or '5' in value or '6' in value or '7' in value or '8' in value or '9' in value):
                        flag = 1
                if flag == 1:
                    print(value)
                    print(cell)
                    # index_list 中第一个元素为在All_cell_low中的索引，第二个元素是为单元格横线的起点、终点， 第三个元素为单元格数量的索引
                    index_list.append([cell[1], [cell[0][0][1], cell[0][1][1]], cell[0][2]])

                point_height[0] = cell[0][1]
                point_height[1] = cell[0][1][0] - cell[0][0][0]

        biaozhun_index.append(index_list)

    return biaozhun_index
